package com.mskj.zxmy.service;

import com.github.pagehelper.PageInfo;
import com.mskj.zxmy.dto.*;
import com.mskj.zxmy.entity.StockIn;
import com.mskj.zxmy.entity.Ck03Listing;


import java.util.List;
import java.util.Map;

public interface StockInService {
    Map<String, StockIn> createStockIn();

//    StockIn getByBillNo(String billNo);

    /**
     * 根据id查询入库单详情
     */
//    StockIn getById(String id);

    /**
     * 确认入库（更新状态）
     */
//    boolean confirmStockIn(String id);

    boolean saveStockInWithDetails(StockInSaveDTO dto);

//    List<Ck03Listing> selectAllStockIn(String repositoryStatus);

    /**
     * 分页查询入库列表
     *
     * @param query 查询条件
     * @return 分页结果
     */
    PageInfo<Ck03Listing> selectAllStockInWithPage(StockInListQueryDTO query);

    /**
     * 根据入库单号查询入库列表
     *
     * @param repositoryNumber
     * @return
     */
    StockIn selectStockInByNumber(String repositoryNumber);

    /**
     * 根据产品入库批次号创建出库明细
     *
     * @param detailId
     * @return
     */
    ProductDetailDTO getProductInfoByDetailId(String detailId);

    ProductDetailDTO getStockInDetailWithProductInfo(Integer batchBarCodeId);

//    保存入库明细
//    boolean saveDetail(StockInDetailSaveDTO detail);

    boolean confirmStockInDetail(StockInSaveDTO dto);


    /**
     * 实时库存查询，按产品和批次分组
     */
//    List<RealTimeStockDTO> getRealTimeStock(String productNumber);

    /**
     * 实时库存分页查询，按产品和批次分组
     *
     * @param query 查询条件
     * @return 分页结果
     */
    PageInfo<RealTimeStockDTO> getRealTimeStockWithPage(RealTimeStockQueryDTO query);

//    /**
//     * 多条件实时库存查询，按产品编号、型号、名称、批次分组统计
//     * @param productNumber 产品编号
//     * @param productModel 型号
//     * @param productName 产品名称
//     * @return 实时库存列表
//     */
//    List<RealTimeStockDTO> getRealTimeStockByCondition(String productNumber, String productModel, String productName);

    boolean updateByDetailId(StockInDetailSaveDTO detail);


//    List<StockInDetailSaveDTO> getStockInDetails(String repositoryStatus);

    /**
     * 分页查询入库明细列表
     *
     * @param query 查询条件
     * @return 分页结果
     */
    PageInfo<StockInDetailSaveDTO> getStockInDetailsWithPage(StockInDetailListQueryDTO query);

//    //入库明细条件筛选
//    List<StockInDetailSaveDTO> filterStockIn(StockInQueryDTO query);

    /**
     * 入库明细多条件分页筛选
     *
     * @param query 查询条件
     * @return 分页结果
     */
    PageInfo<StockInDetailSaveDTO> filterStockInWithPage(StockInQueryDTO query);

    StockInDetailSaveDTO getStockInDetailById(Integer detailId);
}
